#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<array>
using namespace std;
namespace Yuey
{
	template<size_t N = 20>
	class array
	{
	private:
		int _array[N];
		size_t _size;
	};
	//template<double D>
	//class A
	//{
	//private:
	//	
	//};
	/*template<string str, class T>
	class B
	{
	private:
		
	};*/
	/*template<size_t N = 20,class T>
	class D
	{
	private:
		T _array[N];
		size_t _size;
	};*/
		
}
//int main()
//{
//	Yuey::array<5> a1;
//	Yuey::array<20> a2;
//	//Yuey::array a3;
//	Yuey::D<int> d;
//	return 0;
//}

//int main()
//{
//	array<int, 10> a1;
//	cout << a1[10] << endl;
//	return 0;
//}
//int main()
//{
//	int a[10];
//	cout << a[10] << endl;
//	cout << a[10] << endl;
//	a[10] = 2;
//	a[15] = 1;
//	return 0;
//}
//#include<vector>
//int main()
//{
//	vector<int> v(10, 1);
//	return 0;
//}
class Date
{
public:
	Date(int year = 1900, int month = 1, int day = 1)
		: _year(year)
		, _month(month)
		, _day(day)
	{}

	bool operator<(const Date& d)const
	{
		return (_year < d._year) ||
			(_year == d._year && _month < d._month) ||
			(_year == d._year && _month == d._month && _day < d._day);
	}

	bool operator>(const Date& d)const
	{
		return (_year > d._year) ||
			(_year == d._year && _month > d._month) ||
			(_year == d._year && _month == d._month && _day > d._day);
	}

	friend ostream& operator<<(ostream& _cout, const Date& d)
	{
		_cout << d._year << "-" << d._month << "-" << d._day;
		return _cout;
	}

private:
	int _year;
	int _month;
	int _day;
};

//template<class T>
//bool Less(const T& left,const T& right)
//{
//	return left < right;
//}
//template<>
//bool Less<Date*>(Date* const& left, Date* const& right)
//{
//	return *left < *right;
//}
//template<>
//bool Less<const Date*>(const Date* const& left, const Date* const& right)
//{
//	return *left < *right;
//}

//int main()
//{
//	cout << Less(1, 2) << endl;
//	Date d1(2024, 11, 23);
//	Date d2(2024, 11, 24);
//	cout << Less(d1, d2) << endl;
//
//	Date* p1 = &d1;
//	Date* p2 = &d2;
//	cout << Less(p1, p2) << endl;
//
//	const Date* p3 = &d1;
//	const Date* p4 = &d2;
//	cout << Less(p3, p4) << endl;
//
//	int i = 0;
//	const int*& ri = &i;
//	int* const& rx = &i;
//	return 0;
//}
//
template<class T1, class T2>
class Data
{
public:
	Data() 
	{
		cout << "Data<T1, T2>" << endl; 
	}
private:
	T1 _d1;
	T2 _d2;
};
//template<>
//class Data<int, char>
//{
//public:
//	Data() 
//	{
//		cout << "Data<int, char>" << endl; 
//	}
//};
//template<class T>
//class Data<T, char>
//{
//public:
//	Data()
//	{
//		cout << "Data<T, char>" << endl;
//	}
//};
//template <typename T1, typename T2>
//class Data <T1*, T2*>
//{
//public:
//	Data() {
//		cout << "Data<T1*, T2*>" << endl;
//	}
//};
template <typename T1, typename T2>
class Data <T1*, T2&>
{
public:
	Data()
	{
		T1 a;
		T2 b;
		cout << "Data<T1&, T2&>" << endl;
		cout << typeid(a).name() << endl;
		cout << typeid(b).name() << endl;
	}
};
int main()
{
	Data<int*, char&> d4;
	return 0;
}
//class LessDate
//{
//public:
//	bool operator()(Date* d1,Date* d2)
//	{
//		return *d1 < *d2;
//	}
//};
#include"priority_queue.h"
//int main()
//{
//	Yuey::priority_queue<Date> q1;
//	q1.push(Date(2024, 11, 22));
//	q1.push(Date(2024, 11, 23));
//	q1.push(Date(2024, 11, 24));
//	while (!q1.empty())
//	{
//		cout << q1.top() << " " << endl;
//		q1.pop();
//	}
//	cout << endl;
//	Yuey::priority_queue<Date*> q2;
//	q2.push(new Date(2024, 11, 22));
//	q2.push(new Date(2024, 11, 23));
//	q2.push(new Date(2024, 11, 24));
//	while (!q2.empty())
//	{
//		cout << *(q2.top()) << " " << endl;
//		q2.pop();
//	}
//	return 0;
//}
//int main()
//{
//	Yuey::priority_queue<int*> q1;
//	q1.push(new int(1));
//	q1.push(new int(520));
//	q1.push(new int(1314));
//	while (!q1.empty())
//	{
//		cout << *q1.top() << " " << endl;
//		q1.pop();
//	}
//	return 0;
//}